/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.di0.sql.insert;

import br.di0.sql.ConexaoPostgres;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;

/**
 *
 * @author di0
 */
public class InsertUsuarios {

    public InsertUsuarios() {
    }

    public static int inserir(String nome, String senha) {
        int rs = 0;
        String query = "INSERT INTO usuarios VALUES (DEFAULT, \'" +
                nome + "\', \'" + senha + "\')";
        String validacao = "SELECT * FROM usuarios WHERE login = \'" +
                nome + "\'";
        ConexaoPostgres postgres = new ConexaoPostgres();
        try {
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();
            try {
                ResultSet result = stm.executeQuery(validacao);
                while (result.next()) {
                    System.out.println("Usuário já cadastrado com o nome [" +
                            nome + "]");
                    return ERROR_UNIQUE;
                }
            } catch (SQLException ex) {
                System.out.println("Erro ao tentar validar");
                ex.printStackTrace();
            }
            rs = stm.executeUpdate(query);
            System.out.println("Resultado de " + query + ":\n\t" + rs);
        } catch (SQLException ex) {
            System.out.println("Erro ao tentar inserir");
            ex.printStackTrace();
        } finally {
            postgres.finalizaConexao();
        }
        return rs;
    }

    public static int atualizar(String id_usuario, String nome, String passwd) {
        int rs = 0;
        String query = "UPDATE usuarios SET login = \'" + nome + "\' " +
                "WHERE id_usuario = " + id_usuario;

        if (passwd == null) {
            query = "UPDATE usuarios SET login = \'" + nome + "\', " +
                    "senha = \'" + passwd + "\' WHERE id_usuario = " + id_usuario;
        }

        String validacaoNome = "SELECT * FROM usuarios WHERE login = \'" +
                nome + "\'";
        String validacaoID = "SELECT * FROM usuarios WHERE id_usuario = " +
                id_usuario;
        try {
            ConexaoPostgres postgres = new ConexaoPostgres();
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();

            try {
                ResultSet result = stm.executeQuery(validacaoNome);
                while (result.next()) {
                    if (!result.getString("id_usuario").equals(id_usuario)) { //alterar para o mesmo nome
                        System.out.println("Usuário já cadastrado com o nome [" +
                                nome + "]");
                        return ERROR_UNIQUE;
                    }
                }

                result = stm.executeQuery(validacaoID);
                boolean idValido = false;
                while (result.next()) {
                    idValido = true;
                    break;
                }
                if (!idValido) {
                    System.out.println("Código [" + id_usuario + "] não encontrado");
                    return ERROR_ID_NOT_FOUND;
                }
            } catch (SQLException ex) {
                System.out.println("Erro ao tentar validar");
                ex.printStackTrace();
            }


            rs = stm.executeUpdate(query); //atualizar
            System.out.println("Resultado de " + query + ":\n\t" + rs);
        } catch (SQLException ex) {
            System.out.println("Erro ao tentar atualizar: " + query);
            ex.printStackTrace();
        }
        return rs;
    }

    public static String localizar(String id_usuario) {
        String nome = null;
        String validacaoID = "SELECT * FROM usuarios WHERE id_usuario = " +
                id_usuario;
        try {
            ConexaoPostgres postgres = new ConexaoPostgres();
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();

            try {
                ResultSet result = stm.executeQuery(validacaoID);
                boolean idValido = false;
                while (result.next()) {
                    idValido = true;
                    nome = result.getString("login");
                    break;
                }
                if (!idValido) {
                    System.out.println("Código [" + id_usuario + "] não encontrado");
                    return null;
                }
            } catch (SQLException ex) {
                System.out.println("Erro ao tentar validar");
                ex.printStackTrace();
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return nome;
    }
    public static final int ERROR_UNIQUE = -1;
    public static final int ERROR_ID_NOT_FOUND = -2;

    public static void main(String args[]) {
        System.out.println("Chamada manual para inserir no banco de dados \"Usuarios\"");
        inserir("user", "passwd");
        atualizar("4", "nomeAtualizado", "");
    }
}
